
//1156.单字符重复子串的最大长度
class Solution {
public:
    int maxRepOpt1(string text) {
        //此题可以通过交换字符使得相同子串更长
        unordered_map<char,int> mm;    //存储每一个字符出现的次数
        for(auto e:text) mm[e]++;  

        int n=text.size();
        int left=0,ret=0,right=0;
        while(right<n)
        {
            while(right<n&&text[left]==text[right]) right++;  //求左半边相同的数

            int other=right+1;   //从other开始进行右半边的查找
            while(other<n&&text[left]==text[other]) other++;  //求右半边相同的数

            ret=max(ret,min(other-left,mm[text[left]]));    
            //min(other-left,mm[text[left]])保证通过其他位置字符进行交换使得连续时，
                                        // 交换的位置没有计数没有重复
            left=right;   //从不同字符的位置开始进行查找
        }
        return ret;
    }
};